package com.bang.study.lru;

import com.bang.study.day02.map.LinkedListMap;

import java.util.LinkedHashMap;
import java.util.Map;

/**
 * @ClassName: LRUCache
 * @Desc: LRU算法
 * @Auther: <Bang>
 * @Date: 2020/08/26 09:24
 * @Version: 1.0
 * @Modified By:
 */
public class LRUCache<K,V> extends LinkedHashMap<K,V> {

    private final int MAX_CACHE_SIZE;

    // // 这里就是传递进来最多能缓存多少数据
    public LRUCache(int max_cache_size) {
        // 这块就是设置一个hashmap的初始大小，同时最后一个true指的是让
        // linkedhashmap按照访问顺序来进行排序，最近访问的放在头，最老访问的就在尾
        super((int)Math.ceil(max_cache_size / 0.75f) + 1, 0.75f, true);
        MAX_CACHE_SIZE = max_cache_size;
    }

    @Override
    protected boolean removeEldestEntry(Map.Entry<K, V> eldest) {
        // 这个意思就是说当map中的数据量大于指定的缓存个数的时候，就自动删除最老的数据
        return size() > MAX_CACHE_SIZE;
    }
}
